雖然 laravel 5 原生的api 來實做restful web service,已經可以用神速及簡化來形容,
但是因為筆者很駑鈍,又顯麻煩,所以又搜尋了一下,
畢竟restful web service行之有年,從規格草創,到國際網路大廠爭相提供畢竟restful api資料交換,
其實雖沒硬性規定api至少要有那些內容,但是"版本號"的設置是起碼的要求,
像google maps,google calendar這些強大的服務,不用到好像app就會弱掉的restful api,
都更新了幾版,所以要提供資料交換api,"版本號"是基本的設置。其他的基本要求,因為筆者見識也沒
多廣,就暫不提。
所以在laravel界,似乎restful web service的實作,慢慢的以dingo 為一個不勉強的標準,不少人使用。對不是想太深入laravel 或php的user(如筆者),這是個不錯的選擇。
當然,也有很多按流量(或其他存取值)收費的restful web service平台,也不錯。筆者已經花錢租了一個
php+mysql的空間,當然以自建restful web service為主。
這裏 重度 參考 Ivan Radunovic 網友 的實作。
他說
I used Dingo in over 50 different projects and development speed is absolutely
the biggest plus.
所以讀者諸公不妨撥冗試試。
環境設定:composer create-project --prefer-dist laravel/laravel badmin 5.2.x
cd badmin
composer require dingo/api:1.0.x@dev #裝上dingo
#到config/app.php 裏的 providers 設定 array 區塊,加上 此函式庫,
Dingo\Api\Provider\LaravelServiceProvider::class,
#到 .env檔裏 設定參數,除了Ivan Radunovic設的參數外,下面兩個很重要
API_DOMAIN=localhost
API_PREFIX=api
路由器,連結參數的設定
到 app\Http\routes.php 裏加上
$api = app('Dingo\Api\Routing\Router');
$api->version('v1', function ($api) {
$api->get('test', function () {
return 'It is ok';
});
$api->get('users', 'App\Http\Controllers\Api\UserController@getUsers');
});
Ivan Radunovic 網頁有提到的,這裏不翻譯過來或抄襲了,
強調一下 網址的格式,如
http://localhost:8000/api/users?page=2
裏面的api,由API_PREFIX=api設定,
而把 資料表裏的data,轉到json的型式,dingo提供了 TransformerAbstract類別的transform方法,
寫在專屬的,隔開的Transformer檔,
給controller 引用,這是快速打照資料交換api的核心,資料庫的data轉json,很多單一table的data
很方便就這樣轉過去了,而巢狀的data,將在下一次講。
dingo又很貼心的提供分頁服務,
所以筆者再引用一下,
class UserController extends Controller
{
use Helpers;
public function getUsers()
{
//$users = User::all();
$users = User::paginate(2); #一頁有幾筆
//return $this->response->collection($users, new UserTransformer);
return $this->response->paginator($users, new UserTransformer);
}
}
然後在傳回的json格式 data,又貼心的提醒。
http://localhost:8000/api/users
{
"data": [
{
"name": "John Doe",
"email": "john.doe@gmail.com",
"added": "2016-12-15"
},
{
"name": "Jane Doe",
"email": "jane.doe@gmail.com",
"added": "2016-12-15"
}
],
"meta": {
"pagination": {
"total": 3,
"count": 2,
"per_page": 2,
"current_page": 1,
"total_pages": 2,
"links": {
"next": "http://localhost:8000/api/users?page=2"
}
}
}
}
當傳輸的data量高達上萬筆時,這時用分頁來限制回傳筆數,是必須的設置。
紙本記錄的日子,羽球不太容易找到紙本的範例,還是以棒球做範例,
,
有在販售的表格,
優缺點一目了然。
在電腦化的時代,
台灣基層棒球/壘球,不少球隊仍沿用此一記錄的方式。除了紙本的缺點之外,跨場次比賽,紙張愈累積愈多。
統計時加總數據不容易。記錄是職業運動員的靈魂。雖然訪問時,他們會異口同聲的說,個人記錄並不重要,
球隊拿下總冠軍才是終極目標。
而將比賽記錄有結構的儲存下來,有些什麼相關的應用呢? 目前有想到的是,文字旁白播放系統,在上班時不敢
看影像轉播,又極想知道賽事進行,這時文字轉播有其存在必要,除了看比分,稍微可看一些額外資訊。
重點事件的簡易重播系統,是指用一些簡單的圖像,模擬比賽的情況,如球,球拍,球行進軌跡,落點。